/*
 * Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community Edition) available.
 * Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved.
 * Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * http://opensource.org/licenses/MIT
 * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
 * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
 * specific language governing permissions and limitations under the License.
 */

package storage

import (
	"fmt"
	"time"

	"bcs_cc/bkcrypt"
	"bcs_cc/config"

	"github.com/go-redis/redis"
)

// RedisSession :
type RedisSession struct {
	Client *redis.Client
}

// Init : init the redis client
func (r *RedisSession) Init() error {
	redisConf := config.GlobalConfigurations.RedisConf

	pwd := bkcrypt.Decrypt(redisConf.InstanceKey, redisConf.Password)
	r.Client = redis.NewClient(&redis.Options{
		Addr:        fmt.Sprintf("%v:%v", redisConf.Host, redisConf.Port),
		Password:    pwd,
		DB:          redisConf.DefaultDB,
		DialTimeout: time.Duration(redisConf.MaxConnTimeout) * time.Second,
		ReadTimeout: time.Duration(redisConf.ReadTimeout) * time.Second,
		PoolSize:    redisConf.MaxPoolSize,
		IdleTimeout: time.Duration(redisConf.IdleTimeout),
	})
	return nil
}

// Close : close redis session
func (r *RedisSession) Close() {
	r.Client.Close()
}
